#pragma once
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cerrno>
#include <cstring>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>


#define FIFO_FILE "./myFifo"
#define MODE 0666
enum {
    FIFO_CREATE_ERROR = 1,
    FIFO_DELETE_ERROR = 2,
    FIFO_OPEN_ERROR = 3
};
/*
    初始化类，创建管道，当对象销毁时，删除管道
*/
class Init{
public:
    Init(){
        // 创建管道
        if (access(FIFO_FILE, F_OK) != 0){
            // 管道不存在，创建管道
            int n = mkfifo(FIFO_FILE, MODE); // 创建命名管道，文件权限为 0666(实际为 mode & ~umask), 管道存储路径为 FIFO_FILE
            if(n == -1){
                // printf("%d: %s\n", errno, strerror(errno)); // 打印错误信息
                perror("mkfifo");
                exit(FIFO_CREATE_ERROR);
            }
        }
    }
    ~Init(){
        // 删除管道
        int m = unlink(FIFO_FILE);
        if (m == -1) {
            perror("unlink");
            exit(FIFO_DELETE_ERROR);
        }
    }

};